#-*- coding: UTF-8 -*-
from pyramid.httpexceptions import HTTPFound
from pyramid.security import remember
from pyramid.security import forget




from scp.modelo.models import DBSession
from scp.modelo.Atributo import Atributo
from scp.modelo.Tipo_Item import Tipo_Item
from scp.modelo.Tipo_Dato import Tipo_Dato

from pyramid.response import Response
from pyramid.view import view_config
import json

import re


def atributos(request):
	"""Método Controlador de Atributos, contrala las peticiones /atributos/{operacion}
		@param request: Petición Http del cliente. 	
	"""

	print ">>>>>>>>>>>>>Controlador de Atributos - Inicio>>>>>>>>>>>>>>"
	
	methodRequest = request.method
	print methodRequest
	
	print '>>>>>>>>>>>>>>request.url<<<<<<<<<<<<<<<<<<<<<<<<<<'
	
	print request.url
	
	
	print '>>>>>>>>>>>>>>>reles_url<<<<<<<<<<<<<<<<<<<'
	
	print '>>>>>>>>>>>>>>request_matchdict<<<<<<<<<<<<'
	
	dicParametros = request.matchdict
	
	print request.matchdict
	print '>>>>>>>>>>>>>>request_matchdict<<<<<<<<<<<<'
	
	
	print "operación"
	print dicParametros.get('operacion')
	print "operación"
	
	if dicParametros.get('operacion') == 'update' or dicParametros.get('operacion') == 'create':
		print 'entre el if de update de atributos'
		
		print 'json.loads(request.params[atributo])'
		atributo = json.loads(request.params['atributo'])
		print json.loads(request.params['atributo'])
		print 'atributo.data'
		atributoData = atributo.get('data')
		#print rol.get('data')
		print 'atributo.data.nombreAtributo'
		print atributoData.get('nombreAtributo')
		print 'json.loads(request.params[id_tipo_dato])'
		tipos_datos = json.loads(request.params['id_tipo_dato'])
		print tipos_datos
		
	print 'dicParametros.get(operacion).find(?):' 
	print dicParametros.get('operacion').find('?')
	
	
	session = DBSession()
	if dicParametros.get('operacion') == 'view' and request.url.find('?') == -1:
		print 'respondí un diccionario normal'
		return {'content':'Hello!'}	
	elif dicParametros.get('operacion') == 'view':
		atributosAll = session.query(Atributo).all()
		
		print '>>atributosAll'
		print atributosAll
		
		atributosArray = []
		for atributoIter in atributosAll:
			aux = {'idAtributo': atributoIter.id, 'nombreAtributo': atributoIter.nombre, 
					'datoAtributo':atributoIter.tipo_dato, 'observAtributo':atributoIter.observacion}
			atributosArray.append(aux)
		
		print '>>atributosAll'
		print atributosAll
			
		responseView = Response()
		#responseView.body = json.dumps(dict(success = True, roles = [{'idRol':'1', 'nombreRol': 'hola', 'descripRol':'mundo'}, {'idRol':'2', 'nombreRol': 'chau', 'descripRol':'mundo'}]))
		responseView.body = json.dumps(dict(success = True, atributos = atributosArray))
		responseView.content_type = 'application/json'
		print 'respondí con un Responseeeee!!!'
		return responseView
	elif dicParametros.get('operacion') == 'create':
		
		atributoAdd = Atributo()
		
		atributoAdd.nombre = atributoData.get('nombreAtributo')
		atributoAdd.observacion = atributoData.get('observAtributo')
		
		atributosExistentes = session.query(Atributo).all()
		
		existe = False
		for atributo in atributosExistentes:
			if atributo.nombre == atributoAdd.nombre:
				existe = True
				break
		 
		respuesta = None
		mensaje = None
		if not existe:
			tipoDato = session.query(Tipo_Dato).filter_by(id=request.params['id_tipo_dato']).first()
		
			atributoAdd.tipo_dato = tipoDato.nombre
			atributoAdd.tipo_dato_id = tipoDato.id
			session.add(atributoAdd)
			respuesta = 'OK'
			mensaje = 'El atributo fue creado correctamente!'
		else:
			respuesta = 'ER'
			mensaje = 'Ya existe un atributo con ese nombre!!'
		
				
		responseCreate = Response()
		responseCreate.body = json.dumps(dict(success = True, respuesta = respuesta, mensaje = mensaje))
		responseCreate.content_type = 'application/json'
		return responseCreate			
	elif dicParametros.get('operacion') == 'destroy':
		
		
		
		print 'entre en el if de destroy'
		
		idAtributoEliminar = json.loads(request.params['param_idAtributo'])
		atributoEliminar = session.query(Atributo).filter_by(id=idAtributoEliminar).first()
		
		#revisamos si ya no esta siendo utilizado por algun tipo item
		tiposItems = session.query(Tipo_Item).all()
		
		usado = False
		for tipoItem in tiposItems:
			for atributo in tipoItem.atributos:
				if usado:
					break
				if atributo.id == atributoEliminar.id:
					usado = True
					break
		
		respuesta = None
		mensaje = None
		if not usado:
			session.delete(atributoEliminar)
			respuesta = 'OK'
			mensaje = 'El atributo fue eliminado correctamente!'
		else:
			respuesta = 'ER'
			mensaje = 'El atributo ya está siendo utilizado por un Tipo de Item!!'	
		
		responseDestroy = Response()
		responseDestroy.body = json.dumps(dict(success = True, respuesta = respuesta, mensaje = mensaje))
		responseDestroy.content_type = 'application/json'
		return responseDestroy
	elif dicParametros.get('operacion') == 'update':
		atributo = json.loads(request.params['atributo'])
		atributoData = atributo.get('data')
		
		atributosUpdate = session.query(Atributo).filter_by(id = atributoData.get('id')).one()
		
		#atributosUpdate = session.query(Atributo).filter_by(id=atributoData.get('id')).first()
		
		
		#revisamos si ya no esta siendo utilizado por algun tipo item
		tiposItems = session.query(Tipo_Item).all()
		
		usado = False
		for tipoItem in tiposItems:
			for atributo in tipoItem.atributos:
				if usado:
					break
				if atributo.id == atributosUpdate.id:
					usado = True
					break
		
		respuesta = None
		mensaje = None
		if not usado:
			atributosUpdate.nombre = atributoData.get('nombre')
			#atributosUpdate.tipo_dato = atributoData.get('datoAtributo')
			atributosUpdate.observacion = atributoData.get('observacion')
			
			#idtipo_datoUpdate = json.loads(request.params['id_tipo_dato'])
			
			tipoDato = session.query(Tipo_Dato).filter_by(id=request.params['id_tipo_dato']).first()
			atributosUpdate.tipo_dato = tipoDato.nombre
			atributosUpdate.tipo_dato_id = tipoDato.id
			respuesta = 'OK'
			mensaje = 'El atributo fue editado correctamente!'
		else:
			respuesta = 'ER'
			mensaje = 'El atributo ya está siendo utilizado por un Tipo de Item!!'		
		
		responseUpdate = Response()
		responseUpdate.body = json.dumps(dict(success = True, respuesta=respuesta, mensaje = mensaje))
		responseUpdate.content_type = 'application/json'
		return responseUpdate
	elif dicParametros.get('operacion') == 'editarTipo_Item':
		
		tipo_itemEditado = session.query(Tipo_Item).filter_by(id=request.params['idTipo_Item']).first()
		
		print ">>>id tipo_item recibido de la vista!!"
		print request.params['idTipo_Item']
		
		print '>>>Tipo_Item a ser Editado!'
		print tipo_itemEditado.nombre
		
		
		atributosAllEdit = tipo_itemEditado.atributos
		atributosArrayEdit = []
		for atributoIter in atributosAllEdit:
			aux = atributoIter.id
			atributosArrayEdit.append(aux)	
	
		response = Response()
	
		response.body = json.dumps(dict(success = True, atributos = atributosArrayEdit))
		response.content_type = 'application/json'
		return response
	
 
